// wx.request 封装
const app = getApp();
let {
  throttle,
  debounce
} = require('./util');
const {
  API_Exhibition,
  sVersion
} = app.globalData;
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};
let onGetShowLoading = throttle(function (e) {
  // if (!app.store.$state.isShowLoadingModal) {
  //   app.store.setState({
  //     isShowLoadingModal: true
  //   })
  // }
  wx.showLoading({
    title: '加载中',
  })
}, 800)
let onGetHideLoading = debounce(function (e) {
  // if (app.store.$state.isShowLoadingModal) {
  //   app.store.setState({
  //     isShowLoadingModal: false
  //   })
  // }
  wx.hideLoading()
}, 1000)

function wxRequest(url, params) {
  onGetShowLoading()
  let newHeader = {
    'content-type': 'application/json',
    system: 'wx-xcx',
    sVersion: sVersion,
    timeStamp: new Date().getTime(),
    Authorization: `Bearer ${wx.getStorageSync('token') || ''}`
  }
  return new Promise((resolve, reject) => {
    return wx.request({
      url: API_Exhibition + url,
      method: 'POST',
      ...params,
      header: newHeader,
      success: function (res) {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          if (res.data.code === '400') {
            setTimeout(function(){
              wx.showToast({
                title: res.data.msg,
                icon: 'none',
                duration: 3000
              })
            },1300)
            if (app.store.$state.isShowFailedToLoad == true) {
              app.store.setState({
                isShowFailedToLoad: false
              })
            }
            reject(res.data);
          }
          if (res.data.code === '500') {
            if (app.store.$state.isShowFailedToLoad == false) {
              app.store.setState({
                isShowFailedToLoad: true
              })
            }
          }
          if (res.data.code === '401') {
            wx.clearStorage()
            wx.navigateTo({
              url: '/subpackages/bindPhonePage/bindPhone'
            })
            reject({
              msg: '身份失效',
              code: '401'
            })
          }
          // 全局判断正常业务
          if (res.data.code === '200' && res.data.status === 1) {
            if (app.store.$state.isShowFailedToLoad == true) {
              app.store.setState({
                isShowFailedToLoad: false
              })
            }
            resolve(res.data);
          }
        } else if (res.statusCode === 401) {
          wx.clearStorage()
          wx.navigateTo({
            url: '/subpackages/bindPhonePage/bindPhone'
          })
          reject({
            msg: '身份失效',
            code: '401'
          })
        } else {
          if (app.store.$state.isShowFailedToLoad == false) {
            app.store.setState({
              isShowFailedToLoad: true
            })
          }
          const errortext = codeMessage[res.statusCode];
          reject({
            msg: errortext,
            code: res.statusCode
          });
        }
      },
      fail: function (e) {
        if (app.store.$state.isShowFailedToLoad == false) {
          app.store.setState({
            isShowFailedToLoad: true
          })
        }



        wx.hideLoading();
        wx.showModal({
          title: '提示',
          showCancel: false,
          content: '网络请求超时,请稍后再试！',
          success: function() {

          }
        })
        
        reject({
          msg: '请求失败'
        });
      },
      complete: function () {
        onGetHideLoading()
      }
    })
  })
}
module.exports = {
  wxRequest: wxRequest
}